# 类属性
class Student:
    # 类属性 定义外类中、定义在方法外
    school = '陕西咸阳'

    #     初始化方法
    # xm 、age是方法参数、是局部变量 xm和age是局部便利
    def __init__(self, xm, age):
        # = 左侧是实例属性，xm是局部属性，将局部变量的值xm赋值给实例属性 self.name
        self.xm = xm
        self.age = age  # 实例属性赋值

    # 定义的类中的函数，称为方法。自带一个参数self
    def show(self):
        # print(self.school+'666')
        print(f'我的{self.xm},今年{self.age}岁了')

    # 静态方法
    @staticmethod
    def sm():
        # print(self.xm)
        # self.show()
        print('这是一个静态方法，不能调用实例属性。也不能调用实例方法')

    # 类方法
    @classmethod
    def cms(cls):
        # print(self.xm)
        # self.show()
        # print(cls.school)
        print('这是一个类方法，不能调用实例属性，也不能调用实例方法')


if __name__ == '__main__':
    # 为什么是两个参数，因为 __init__方法中，有两个形参self是自带参数，无需手动传入
    stu = Student('马弟弟', 24)
    # 静态方法 打点调用
    Student.sm()
    stu.sm()
    # 实例属性，使用对象名直接打点调用
    print(stu.xm, stu.age)
    #     类属性，类名/类的代替名直接打点调用
    print(stu.school)
    print(Student.school)
    #     实例方法 使用对象名
    stu.show()
    #   类方法 也是打点调用
    stu.cms()
    Student.cms()
